/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * UNIVERSIDAD DEL VALLE DE GUATEMALA
 * ALGORITMOS Y ESTRUCTURAS DE DATOS - SECCION 20
 * RADIO DE CARRO (CLASE QUE IMPLEMENTA INTERFAZ)
 * @author Javier Ivan Castillo Rivera, 11010
 * @author Jose Guillermo Gonzalez Mclaughlin, 11289
 * @author Derek Warren Orbaugh Antillon, 09180
 */


//Se declara la Clase Radio5 y se implementa la Interfaz llamado Radio.
public class Radio5 implements Radio
{
    // Declaracion de variables
    private float FrecuenciaFM;
    // Lista de memoria para Estaciones de FM
    private float[] MemoriaFM;
    // Variables para saber en que banda esta el radio y si esta apagado o encendido.
    private String Banda, IORadio;
    // Frecuencia de AM, counter para inicializar lista de memoria.
    private int FrecuenciaAM, Counter = 12;
    // Lista de memoria para Estaciones de aM
    private int[] MemoriaAM;
    
    
    // Constructor de Radio 5. Se inicializan las variables. 
    public Radio5()
    {
    	FrecuenciaFM = FM_MIN;
        FrecuenciaAM = AM_MIN;
    	IORadio = "Off";
    	Banda = "FM";
    	MemoriaFM = new float[12];
    	MemoriaAM = new int[12];
        for (int j = 0; j<Counter;j++)
        {
            MemoriaFM[j] = 87.9f;
            MemoriaAM[j] = 530;
        }
    }
    
    /**
     * Enciende o apaga el Radio
     */
    public void onOff()
    {
    	if(IORadio.equalsIgnoreCase("off"))
    		IORadio = "On";
    	else
    		IORadio = "Off";
    }
    
    /**
     * Cambia la banda entre am/fm
     */
    public void cambiarBanda()
    {
        //Si esta en AM cambia a FM y viceversa.
    	if(Banda.equalsIgnoreCase("AM") )
    	{
    		Banda = "FM";
    		FrecuenciaFM = FM_MIN;
    	}
    	else
    	{
    		Banda = "AM";
    		FrecuenciaAM = AM_MIN;
    	}
    		
    }
    
    /**
     * Aumenta la frecuencia en el delta correspondiente a la banda
     * Cuando llega al maximo deberia regresar a la fercuencia minima para la banda
     */
    public void cambiarFrecuencia()
    {
        // Si esta en FM suma delta FM
    	if(Banda.equalsIgnoreCase("FM"))
    	{
            FrecuenciaFM = FrecuenciaFM + FM_D;
            // Cuando FM pasa 107.9 se regresa a la minima frecuencia FM
            if(FrecuenciaFM > FM_MAX)
                FrecuenciaFM = FM_MIN;
    	}
        // Si esta en AM suma delta AM.
    	else
    	{
    		FrecuenciaAM = FrecuenciaAM + AM_D;
                // Cuando AM pasa 1610 se regresa a la minima frecuencia AM
    		if (FrecuenciaAM > AM_MAX)
    			FrecuenciaAM = AM_MIN;
    	}
    }
    
    /**
     * Guarda la frecuencia seleccionada en el boton pasado como argumento
     * @param boton
     */
    public void guardarEstacion(int boton)
    {
    	if(Banda.equalsIgnoreCase("FM"))
    		MemoriaFM[boton-1] = FrecuenciaFM;
    	else
    		MemoriaAM[boton-1] = FrecuenciaAM;
    }
    
    /**
     * Cambia la frecuencia seleccionada a la frecuencia guardada
     * en el boton pasado como argumento
     * @param boton 
     */
    public void seleccionarEstacion(int boton)
    {
    	if(Banda.equalsIgnoreCase("FM"))
    		FrecuenciaFM = MemoriaFM[boton-1];
    	else
    		FrecuenciaAM = MemoriaAM[boton-1];
    }
    
    /**
     * 
     * @return Frecuencia seleccionada actualmente
     */
    public float getFrecuencia()
    {
    	if(Banda.equalsIgnoreCase("FM"))
            return FrecuenciaFM;
    	else
            return FrecuenciaAM;
    }
    
    /**
     * 
     * @return True si el radio esta encendido, false de lo contrario.
     */
    public boolean isOn()
    {
    	if(IORadio.equalsIgnoreCase("On"))
    		return true;
    	else
    		return false;
    }
    
    /**
     * 
     * @return True si la banda seleccionada es AM, False de lo contrario
     */
    public boolean isAM()
    {
    	if (Banda.equalsIgnoreCase("AM"))
    		return true;
    	else
    		return false;
    }
    
    /**
     * 
     * @return True si la banda seleccionada es FM, False de lo contrario
     */
    public boolean isFM()
    {
    	if (Banda.equalsIgnoreCase("AM"))
    		return true;
    	else
    		return false;
    }
}

